package jtracking_server;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import org.apache.log4j.*;
/**
 * Diese GUI wird anfangs gestartet und zeigt ein Trayicon im System Tray an.
 * ein klick auf das Trayicon fragt mit {@link DBManager.checkAuth(String, char[])}
 * ein passwort ab und startet die {@link GUI}, das TrayIcon bleibt.
 *
 */
// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.108DDE29-C8BD-D8AD-229C-74FE49F32C91]
// </editor-fold> 
public class TrayGUI {
    TrayIcon trayIcon;
    SystemTray systemTray;
    Main main;
    private final Logger logger = Logger.getLogger(this.getClass());

    public TrayGUI (Main m)
    {
        main = m;
        //Trayicon anzeigen

        if (SystemTray.isSupported())
        {
            SystemTray tray = SystemTray.getSystemTray();
            Image image = Toolkit.getDefaultToolkit().getImage("JTrackingTrayIcon.jpg");
            ActionListener exitListener = new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {

                    int response = JOptionPane.showConfirmDialog(main.gui,
                            "Wirklich JTracking beenden? Es werden keine Daten von Clients mehr angenommen!",
                            "Beenden?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
                    switch(response)
                    {
                            case 0: //ja
                                trayIcon.displayMessage("JTracking wird beendet...", "Ressourcen werden freigegeben, dies kann eine Weile dauern...", TrayIcon.MessageType.INFO);
                                //TODO sicherstellen, dass das Icon erst verschwindet, wenn alle ThreadHooks gelaufen sind (ist das möglich?)
                                logger.info("JTracking wird beendet");
                                System.exit(0);
                                //jeder, der noch Daten blockiert, soll sich einen ThreadHook anmelden.
                                break;
                            case 1: //nein
                                //dann nicht.
                                break;
                    }
                }
            };
            ActionListener openListener = new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    if(main.gui == null )
                    {
                        main.gui = new UebersichtsGUI(main.dBManager);
                        main.gui.setVisible(true);
                    }
                    else if (!main.gui.isVisible())
                    {
                        main.gui.setVisible(true);
                    } else {
                        main.gui.toFront();
                    }
                    logger.info("JTracking GUI wurde geöffnet");
                }
            };
            ActionListener loggerListener = new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    main.loggerGUI = new LoggerGUI();
                    main.loggerGUI.setVisible(true);
                }
            };

            PopupMenu popup = new PopupMenu();

            MenuItem item = new MenuItem("Beenden");
            MenuItem item2 = new MenuItem("JTracking DB öffnen");
            MenuItem item3 = new MenuItem("Info-Logger öffnen");

            item.addActionListener(exitListener);
            item2.addActionListener(openListener);
            item3.addActionListener(loggerListener);

            popup.add(item2);
            popup.add(item3);
            popup.add(item);

            trayIcon = new TrayIcon(image, "JTracking", popup);
            trayIcon.addActionListener(openListener);
            trayIcon.setImageAutoSize(true);
            try
            {
                tray.add(trayIcon);
            }
            catch (AWTException e)
            {
                logger.error("TrayIcon konnte nicht angezeigt werden!",e);
            }
        }
        else
        {
            logger.error("TrayIcon konnte nicht erstellt werden!");
        }
        //tipp: http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/
    }
    public static void main(String args[])
    {
        new TrayGUI(null);
    }
}

